#ifndef __SW_SCENE_H__
#define __SW_SCENE_H__

#include "sweety.h"
#include <string>
#include <vector>
#include <functional>

namespace SW
{
	class SW_API SwScene
	{
	public:
						SwScene();
		virtual			~SwScene();

		virtual bool	ShouleClose();
		virtual void	Update(float deltaTime);
		virtual void	Render();
		virtual void	RenderSwGui();

		void			SetSize(const SwVec2& size);
		SwVec2			GetSize() const;
	
	private:
		SwVec2			m_Size;
	};

	typedef std::pair<std::function<SwScene* ()>, std::string> SceneItem;


	class SwSceneMenu :public SwScene
	{
	public:
						SwSceneMenu();
						~SwSceneMenu();
		void			RenderSwGui();
		void			Render();
		void			Update(float deltaTime);

		template<typename T>
		void			RegistScene(const std::string& title)
		{
			m_Menu.emplace_back(
				std::make_pair
				(
					[]()
					{
						return new T();
					}
					,
						title
						)
			);
		}

	private:
		std::vector<SceneItem>	m_Menu;
		SwScene*				m_CurrentScene{ nullptr };
	};
}

#endif
